• A
  • B
  • C
  • D
  • E
  • F
  • G
  • H
  • I
  • J
  • K
  • L
  • M

Сортировки, куча, бинпоиск

A. Простая сортировка

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 64 мегабайта

В этой задаче вам нужно реализовать любую из пройденных сортировок, работающих за время $O(n \log n)$. Использовать встроенные в язык сортировки и структуры данных запрещается.

Дан массив целых чисел. Ваша задача — отсортировать его в порядке неубывания.

Входные данные

В первой строке содержится число $n$ $(1 ⩽ n ⩽ 100\ 000)$ — количество элементов в массиве. Во второй строке находятся $n$ целых чисел, по модулю не превосходящих $10^9$.

Выходные данные

Выведите этот же массив в порядке неубывания.

Пример

Входные данные

10
1 8 2 1 4 7 3 2 3 6

Выходные данные

1 1 2 2 3 3 4 6 7 8

Решение

B. Сортировка подсчетом

Ограничение по времени на тест: 1 секунда
Ограничение по памяти на тест: 64 мегабайта

А в этой задаче вам нужно реализовать сортировку подсчетом. Использовать другие сортировки запрещается.

Дан массив из $n$ элементов, которые принимают целые значения от 0 до 100. Отсортируйте этот массив в порядке неубывания элементов.

Входные данные

В первой строке содержится число $n$ $(1 ⩽ n ⩽ 200\ 000)$ — количество элементов в массиве. Во второй строке находятся n целых чисел, от 0 до 100 каждое.

Выходные данные

Выведите отсортированный массив.

Пример

Входные данные

5
7 3 4 2 5

Выходные данные

2 3 4 5 7

Решение

C. Количество инверсий

Ограничение по времени на тест: 5 секунд
Ограничение по памяти на тест: 256 мегабайт

Напишите программу, которая для заданного массива $A = ⟨a_1, a_2, …, a_n⟩$ находит количество пар $(i, j)$ таких, что $i < j$ и $a_i > a_j$.

Входные данные

Первая строка входного файла содержит натуральное число $n$ $(1 ⩽ n ⩽ 500\ 000)$ — количество элементов массива. Вторая строка содержит $n$ попарно различных элементов массива $A$ $(0 ⩽ a_i ⩽ 10^6)$.

Выходные данные

В выходной файл выведите одно число — ответ на задачу.

Пример

Входные данные

4
1 2 4 5

Выходные данные

0

Входные данные

4
5 4 2 1

Выходные данные

6

Решение

D. Хипуй!

Ограничение по времени на тест: 3 секунды
Ограничение по памяти на тест: 256 мегабайт

В этой задаче вам необходимо организовать структуру данных Heap для хранения целых чисел, над которой определены следующие операции:

  • Insert(X) — добавить в Heap число $X$;
  • Extract — достать из Heap наибольшее число (удалив его при этом).

Эту задачу нужно решить без использования встроенных структур данных для поиска максимального числа.

Входные данные

Во входном файле записано количество команд $n$ $(1 ⩽ n ⩽ 100\ 000)$, потом последовательность из $n$ команд, каждая в своей строке.

Каждая команда имеет такой формат: 0 <число> или 1, что означает соответственно операции Insert(<число>) и Extract. Добавляемые числа находятся в интервале от $1$ до $10^7$ включительно.

Гарантируется, что при выполнении команды Extract в структуре находится по крайней мере один элемент.

Выходные данные

В выходной файл для каждой команды извлечения необходимо вывести число, полученное при выполнении команды Extract.

Пример

Входные данные

7
0 100
0 10
1
0 5
0 30
0 50
1

Выходные данные

100
50

Решение

E. Быстрый поиск в массиве

Ограничение по времени на тест: 1 секунда
Ограничение по памяти на тест: 512 мегабайт

Дан массив из $n$ целых чисел. Все числа от $−10^9$ до $10^9$.

Нужно уметь отвечать на запросы вида «Cколько чисел имеют значения от $l$ до $r$»?

Входные данные

Число $n$ $(1 ⩽ n ⩽ 10^5$). Далее $n$ целых чисел.

Затем число запросов $k$ $(1 ⩽ k ⩽ 10^5)$.

Далее $k$ пар чисел $l, r$ $(−10^9 ⩽ l ⩽ r ⩽ 10^9)$ — собственно запросы.

Выходные данные

Выведите $k$ чисел — ответы на запросы.

Пример

Входные данные

5
10 1 10 3 4
4
1 10
2 9
3 4
2 2

Выходные данные

5 2 2 0

Решение

F. Приближенный двоичный поиск

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 256 мегабайт

Даны два массива. Первый массив отсортирован по неубыванию, второй массив содержит запросы — целые числа.

Для каждого запроса выведите число из первого массива наиболее близкое (то есть с минимальным модулем разности) к числу в этом запросе. Если таких несколько, выведите меньшее из них.

Входные данные

В первой строке входных данных содержатся числа $n$ и $k$ $(0 < n, k ⩽ 10^5)$. Во второй строке задаются $n$ чисел первого массива, отсортированного по неубыванию, а в третьей строке — $k$ чисел второго массива. Каждое число в обоих массивах по модулю не превосходит $2 \cdot 10^9$.

Выходные данные

Для каждого из $k$ чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько, выведите меньшее из них.

Пример

Входные данные

5 5
1 3 5 7 9
2 4 8 1 6

Выходные данные

1
3
7
1
5

Решение

G. Очень Легкая Задача

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 256 мегабайт

Сегодня утром жюри решило добавить в вариант олимпиады еще одну, Очень Легкую Задачу. Ответственный секретарь Оргкомитета напечатал ее условие в одном экземпляре, и теперь ему нужно до начала олимпиады успеть сделать еще $n$ копий. В его распоряжении имеются два ксерокса, один из которых копирует лист за $x$ секунд, а другой — за $y$. (Разрешается использовать как один ксерокс, так и оба одновременно. Можно копировать не только с оригинала, но и с копии.) Помогите ему выяснить, какое минимальное время для этого потребуется.

Входные данные

На вход программы поступают три натуральных числа $n$, $x$ и $y$, разделенные пробелом $(1 ⩽ n ⩽ 2 \cdot 10^8, 1 ⩽ x, y ⩽ 10)$.

Выходные данные

Выведите одно число — минимальное время в секундах, необходимое для получения $n$ копий.

Пример

Входные данные

4 1 1

Выходные данные

3

Входные данные

5 1 2

Выходные данные

4

Решение

H. Квадратный корень и квадратный квадрат

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 256 мегабайт

Найдите такое число $x$, что $x^2 + \sqrt{x}$, с точностью не менее 6 знаков после точки.

Входные данные

В единственной строке содержится вещественное число $1.0 ⩽ C ⩽ 10^{10}$.

Выходные данные

Выведите одно число — искомый $x$.

Пример

Входные данные

2.0000000000

Выходные данные

1.0

Входные данные

18.0000000000

Выходные данные

4.0

Решение

I. Поляна дров

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 256 мегабайт

Маленький мальчик Ферма́ живет в деревне. Наступают холодные времена, поэтому бабушка попросила мальчика сходить в лес, чтобы собрать дров. В лесу около деревни, в которой живет Ферма, находится волшебная Поляна Дров, на которой всегда лежат дрова, и никогда не кончаются. Естественно, Ферма должен пойти именно туда.

Единственная проблема заключается в том, что идти до Поляны не очень близко, тем более что скорость передвижения по лесу намного меньше, чем скорость передвижения по полю, в котором находится деревня.

  • Деревня находится в точке с координатами $(0, 1)$.
  • Поляна находится в точке с координатами $(1, 0)$.
  • Граница между лесом и полем — горизонтальная прямая $y = a$, где $a$ — некоторое число $(0 ⩽ a ⩽ 1)$.
  • Скорость передвижения по полю составляет $V_p$, скорость передвижения по лесу — $V_f$. Вдоль границы можно двигаться как по лесу, так и по полю.

Найдите точку, в которой мальчик Ферма должен войти в лес, чтобы дойти до Поляны Дров как можно быстрее.

Входные данные

В первой строке входного файла содержатся два положительных целых числа — $V_p$ и $V_f$ $(1 ⩽ V_p, V_f ⩽ 10^5)$. Во второй строке содержится единственное вещественное число — координата по оси $O_y$ границы между лесом и полем $a$ $(0 ⩽ a ⩽ 1)$

Выходные данные

В единственной строке выходного файла выведите вещественное число с точностью не менее 4 знаков после запятой — координата по оси $O_x$ точки, в которой мальчик Ферма должен войти в лес.

Пример

Входные данные

5 3
0.4

Выходные данные

0.783310604

Решение

J. K-best

Ограничение по времени на тест: 2 секунды
Ограничение по памяти на тест: 256 мегабайт

У Демьяны есть $n$ драгоценностей. Каждая из драгоценностей имеет ценность $v_i$ и вес $w_i$. С тех пор, как её мужа Джонни уволили в связи с последним финансовым кризисом, Демьяна решила продать несколько драгоценностей. Для себя она решила оставить лишь $k$ лучших. Лучших в смысле максимизации достаточно специфического выражения: пусть она оставила для себя драгоценности номер $i_1, i_2, …, i_k$, тогда максимальной должна быть величина

$$\frac{\sum\limits_{j=1}^{k}v_{i_j}}{\sum\limits_{j=1}^{k}w_{i_j}}$$

Помогите Демьяне выбрать $k$ драгоценностей требуемым образом.

Входные данные

На первой строке $n$ и $k$ $(1 ⩽ k ⩽ n ⩽ 100\ 000)$.

Следующие $n$ строк содержат пары целых чисел $v_i$, $w_i$ $(0 ⩽ v_i ⩽ 10^6,$ $1 ⩽ w_i ⩽ 10^6)$, сумма всех $v_i$ не превосходит $10^7$, сумма всех $w_i$ также не превосходит $10^7)$.

Выходные данные

Выведите $k$ различных чисел от $1$ до $n$ — номера драгоценностей. Драгоценности нумеруются в том порядке, в котором перечислены во входных данных. Если есть несколько оптимальных ответов, выведите любой.

Пример

Входные данные

3 2
1 1
1 2
1 3

Выходные данные

1
2

Решение

K. Разделение массива

Ограничение по времени на тест: 1 секунда
Ограничение по памяти на тест: 256 мегабайт

Дан массив из $n$ положительных целых чисел. Нужно разбить его на $k$ отрезков так, чтобы максимальная сумма на отрезке была минимально возможной.

Входные данные

Первая строка содержит целые числа $n$ и $k$ $(1 ⩽ k ⩽ n ⩽ 10^5)$. Вторая строка содержит элементы массива $a_i$ $(1 ⩽ a_i ⩽ 10^9)$.

Выходные данные

Выведите одно число — минимально возможную максимальную сумму на отрезке.

Пример

Входные данные

10 4
1 3 2 4 10 8 4 2 5 3

Выходные данные

12

Решение

L. Таблица умножения

Ограничение по времени на тест: 1 секунда
Ограничение по памяти на тест: 256 мегабайт

Петя составил таблицу умножения размера $n \times n$. Ячейка в $i$-й строке и $j$-м столбце содержит значение $i \cdot j$. Петю заинтересовал вопрос: какое число в таблице является $k$-м по возрастанию? Помогите Пете ответить на этот вопрос.

Входные данные

Ввод содержит два целых числа $n$ и $k$ $(1 ⩽ n ⩽ 10^5, 1 ⩽ k ⩽ n^2)$.

Выходные данные

Выведите одно число — $k$-е число по возрастанию в таблице.

Пример

Входные данные

3 4

Выходные данные

3

Входные данные

5 16

Выходные данные

10

Решение

M. K-я сумма

Ограничение по времени на тест: 1 секунда
Ограничение по памяти на тест: 256 мегабайт

Есть два массива $a$ и $b$, каждый из которых состоит из $n$ чисел. Для каждой пары чисел $(i, j): 1 ⩽ i, j ⩽ n$ выпишем сумму чисел $a_i + b_j$. Найдите в полученном множестве сумм $k$-ю по возрастанию.

Входные данные

Первая строка содержит целые числа $n$ и $k$ $(1 ⩽ n ⩽ 10^5, 1 ⩽ k ⩽ n^2)$. Вторая строка содержит элементы массива $a$, третья строка содержит элементы массива $b$. Все элементы массивов — целые положительные числа, не больше $10^9$.

Выходные данные

Выведите одно число — искомая $k$-я сумма.

Пример

Входные данные

5 10
4 2 6 4 8
7 3 1 9 5

Выходные данные

9

Решение